using System.Collections.Generic;

namespace CHEnhanceEfCore.Config.MQ.config
{
    public class QueueConfig
    {
        /// <summary>
        /// 队列名字
        /// </summary>
        public string queueName { get; set; }

        /// <summary>
        /// 是否持久化该队列
        /// </summary>
        public bool durable { get; set; } = true;

        /// <summary>
        /// 是否仅有一个连接
        /// </summary>
        public bool exclusive { get; set; } = false;

        /// <summary>
        /// 是否当最好一个消费者消费完以后 删除该队列
        /// </summary>
        public bool autoDelete { get; set; } = false;

        /// <summary>
        /// 限制处理信息数 0代表不受限制
        /// </summary>
        public ushort prefetchCount { get; set; } = 0;

        /// <summary>
        /// 是否自动ack
        /// </summary>
        public bool isAutoAck { get; set; } = true;

        /// <summary>
        /// 队列的可选参数
        /// ex:x-message-ttl：设置队列中消息的过期时间（毫秒）。超过过期时间的消息将被删除。
        /// x-expires：设置队列的自动删除时间（毫秒）。如果在指定时间内没有被使用，队列将被自动删除。
        /// x-max-length：限制队列中可以存储的最大消息数量。当队列达到最大长度时，新的消息将被丢弃或拒绝。
        /// x-max-length-bytes：限制队列中可以存储的最大消息总字节数。当队列达到最大字节数时，新的消息将被丢弃或拒绝。
        /// x-dead-letter-exchange：设置死信队列的交换机名称。当队列中的消息成为死信时，将被发送到指定的交换机。
        /// x-dead-letter-routing-key：设置死信队列的路由键。当队列中的消息成为死信时，将使用指定的路由键进行路由。
        /// x-max-priority：设置队列支持的最大优先级。较高优先级的消息将会被优先处理。
        /// x-queue-mode：设置队列的模式。可选值为 "lazy"，延迟模式，可以减少内存占用。
        /// x-queue-master-locator：设置队列的主节点位置策略。可选值为 "min-masters"，将队列分配给拥有最少队列的节点。
        /// </summary>
        public Dictionary<string, object> arguments { get; set; } = new();
    }
}